<head>
  <title>Plugin crashing</title>
  <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
  <script type="application/javascript" src="plugin-utils.js"></script>

<body>
  <script class="testbody" type="application/javascript">
  SimpleTest.waitForExplicitFinish();
  setTestPluginEnabledState(SpecialPowers.Ci.nsIPluginTag.STATE_ENABLED);

  window.frameLoaded = function frameLoaded_toCrash() {
    SimpleTest.expectChildProcessCrash();

    var iframe = document.getElementById('iframe1');
    var p = iframe.contentDocument.getElementById('plugin1');

    p.setColor("FFFF00FF");

    try {
      p.crash();
      ok(false, "p.crash() should throw an exception");
    }
    catch (e) {
      ok(true, "p.crash() should throw an exception");
    }

    // Create random identifiers to test bug 560213
    for (var i = 0; i < 5; ++i) {
      var r = 'rid_' + Math.floor(Math.random() * 10000 + 1);
      try {
        ok(!(r in p), "unknown identifier in crashed plugin should fail silently");
      }
      catch (e) {
        ok(false, "unknown identifier check threw");
      }
    }

    try {
      p.setColor("FFFF0000");
      ok(false, "p.setColor should throw after the plugin crashes");
    }
    catch (e) {
      ok(true, "p.setColor should throw after the plugin crashes");
    }

    window.frameLoaded = function reloaded() {
      var p = iframe.contentDocument.getElementById('plugin1');
      try {
        p.setColor('FF00FF00');
        ok(true, "Reloading worked");
      }
      catch (e) {
        ok(false, "Reloading didn't give us a usable plugin");
      }
      SimpleTest.finish();
    }

    iframe.contentWindow.location.reload();
  }

  </script>
  <iframe id="iframe1" src="crashing_subpage.html" width="600" height="600"></iframe>
